const threeSum = (nums) => {
    const len = nums.length
    const result = []
    // 因为是三数之和，小于三个不用考虑了
    if(len < 3){
        return result
    }
    nums.sort((a, b) => a - b)
    // len - 2 同样道理，小于三个不用考虑
    for(let i = 0; i < len - 2; i++){
        // 如果第一个就大于0了，三个加起来肯定大于0
        if(nums[i] > 0){
            break
        }
        // 避免掉重复的情况
        if(i && nums[i] === nums[i - 1]){
            continue
        }
        let left = i + 1
        let right = len - 1
        // 双指针夹逼
        while(left < right){
            const sum = nums[i] + nums[left] + nums[right]
            if(sum === 0){
                result.push([nums[i], nums[left++], nums[right--]])
                // push 加了之后防止还存在重复
                while(nums[left] === nums[left - 1]){
                    left++
                }
                while(nums[right] === nums[right + 1]){
                    right--
                }
            }else if(sum > 0){
                right--
            }else{
                left++
            }
        }
    }
    return result
}
var nums = [-1, 0, 1, 2, -1, -4]
console.log(threeSum1(nums))
